using System;
using Lapas.Common;

namespace Lapas.Common
{
    /// <summary>
    /// Quản lý các thông số hệ thống.
    /// Yêu cầu được khởi tạo (class level) khi chạy project hoặc thực hiện trong khi đăng nhập
    /// </summary>
    public class Configuration
    {
        private static string connectionStringAccount = ""; // Kết nối tới CSDL Account
        
        private static string serverNameAccount = "";// Server chứa CSDL Account
        private static string databaseNameAccount = "";// Tên database Account
        
        private static string userNameAccount = "";// Tên truy nhập vào database Account
        private static string passwordAccount = "";// Mật khẩu vào database Account
        
        //private static int userID = 0; // ID của người sử dụng chương trình
        //private static string userName = "";//Tên truy nhập chương trình
        private static string branchCode = "";// Mã chi nhánh sử dụng chương trình
        

        public Configuration()
        {
            //
            // TODO: Add constructor logic here
            //

            // Khởi tạo ngay khi bắt đầu chạy chương trình
            InitConnetionString();
        }
        
        /// <summary>
        /// Lấy SQL connection string cho CSDL Account
        /// </summary>
        public static string ConnectionStringAccount
        {
            get
            {
                return connectionStringAccount;
            }
            set
            {
                connectionStringAccount = value;
            }
        }

       
        // Lấy connection và các thông tin về máy chủ, CSDL, tên truy nhập, mật khẩu từ registry
        // Được thực hiện khi bắt đầu chạy chương trình
        public static void InitConnetionString()
        {

            try
            {
                WinRegistry reg = new WinRegistry();
                RijndaelEnhanced encryptionKey =
                       new RijndaelEnhanced(AppSettings.PassEncryption, AppSettings.InitVectorEncryption);

                // Đọc tham số kết nối tới database Account

                serverNameAccount = reg.Read("ServerNameAccount");
                if (reg.Read("DatabaseNameAccount") != string.Empty)
                {
                    databaseNameAccount = reg.Read("DatabaseNameAccount");

                }
                userNameAccount = reg.Read("UserNameAccount");

                if (reg.Read("PasswordAccount") != string.Empty)
                {
                    passwordAccount = encryptionKey.Decrypt(reg.Read("PasswordAccount"));
                }
                connectionStringAccount = "Server=" + serverNameAccount + ";Database=" + databaseNameAccount + ";UID=" + userNameAccount + ";pwd=" + passwordAccount + ";";
                
                 // BranchCode
                branchCode = reg.Read("BranchCode");


            }
            catch
            {
                DisplayMessage.ShowError("Hệ thống không xác định được dữ liệu cũ.\nXin mời vào phần Thiết lập tham số thiết lập lại");
            }
        }

        /// <summary>
        /// Tên máy chủ chứa database Account
        /// </summary>
        public static string ServerNameAccount
        {
            get
            {
                return serverNameAccount;
            }
            set
            {
                serverNameAccount = value;
            }
        }

        public static string DatabaseNameAccount
        {
            get
            {
                if (databaseNameAccount == string.Empty)
                {
                    return AppSettings.DefaultDatabaseName;
                }
                return databaseNameAccount;
            }
            set
            {
                databaseNameAccount = value;
            }
        }

     
        /// <summary>
        /// Tên truy nhập vào CSDL Account
        /// </summary>
        public static string UserNameAccount
        {
            get
            {
                return userNameAccount;
            }
            set
            {
                userNameAccount = value;
            }
        }

        public static string PasswordAcount
        {
            get
            {
                return passwordAccount;
            }
            set
            {
                passwordAccount = value;
            }
        }

    }
}
